/*! \file InPerFot.h
    \brief Interface do Modulo Percistencia de Fotos.

   //fazer um comentario
 */

#ifndef PerFot
#define PerFot

#ifdef PerFot_Serv
#define ExtPF
#else
#define ExtPF extern
#endif

#define ARQUIVO_PF "Foto.txt"
#define NARQUIVO_PF "Foto"
#define TAMANHOREG_PF 82
#define EXTENSAO_PF ".txt"
#define VARIAVELCONTROLE_PF '$'

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "InVetBit.h"

/**
   \struct Foto_M
   \brief Essa e a estrutura que classifica a lista de fotos no contexto modulo de persistencia de fotos variaveis
 */
struct Foto_M {
    char CpfUser[12];
    char CodigAlbum[11];
    char CodigFoto[11]; /**< Um vetor de caracteres com 11 posicoes que Armazena o codigo da foto */
    char Nome[16]; /**< Um vetor de caracteres com 15 posicoes que Armazena o nome da foto*/
    char Data[11]; /**< Um vetor de caracteres com 11 posicoes que Armazena a data da foto*/
    char Veloc[4]; /**< Um vetor de caracteres com 4 posicoes que Armazena o coeficiente da velocidade da foto \n ex.: para 1/2 Armazanamos 2*/
    char Abert[4]; /**< Um vetor de caracteres com 4 posicoes que Armazena a Abertura com que a foto foi tirada*/
    char Iso[4]; /**< Um vetor de caracteres com 4 posicoes que Armazena o iso da foto*/
    float Media; /**< um float que Armazena a media da foto**/
    int NumerVotos; /**< um inteiro que Armazena o numero votos que essa foto ja teve*/
};

/*! \var typedef struct Foto_M FotoPF
    \brief Representacao de Fotos no centexto Modulo percistencia de Fotos
 */
typedef struct Foto_M Foto_PF;


/*! \fn ExtPF Foto* PegaFoto(char* Usuario, char* CodigoFoto);
    \brief Responsavel por retornar uma Struct com os dados da fotografia de um usuario
    \param Usuario : O nome do Usuario a quem a foto pertence.
   \param CodigoFoto : O codigo da foto pesquisada.
   \return Uma Struct com todos os dados da fotografia Pesquisada.
 */
ExtPF int PegaFoto(const char*, const char*, Foto_PF*);

/*! \fn ExtPF int AtualizaFoto(FotoPF* FotoAtua);
    \brief Responsavel por atualizar os dados de uma foto com os dados da struct que foi passada.
    \param FotoAtua : Uma struct prechida com os novos dados da foto.
   \return Um inteano que retorna verdadeiro se o foto foi atualizada com sucesso, e falso se ouve falha no atualizar o arquivo.
 */
ExtPF char* AtualizaFoto(Foto_PF*);

/*! \fn ExtPF int DeletaFoto(char* Usuario, char* CodigoFoto);
   \brief Responsavel por deletar do arquivo certa foto.
   \param Usuario : O nome do Usuario a quem a foto pertence.
   \param CodigoFoto : O codigo da foto a ser deletada.
   \return Um vetor de caracteres Alocado Dinamicamente onde esta o codigo do album onde a foto pertence, retorna NULL caso nao pertenca a nenhum album
   e um vetor prechido com a palavra (erro) caso aja um erro.
 */
ExtPF int DeletaFoto(const char*, const char*);

/*! ExtPF int VotaFoto(char* Usuario, char* CodigoFoto, float NovaMedia, int NumerVotos);
    \brief Responsavel por atualizar os dados do usuario com os dados da struct que foi passada.
   \param Usuario : O nome do Usuario a quem a foto pertence.
   \param CodigoFoto : O codigo da foto a ser deletada.
   \param NovaMedia : O valor da nova media da Foto
   \param NumerVotos	: O numero de usuarios que ja votaram na foto
   \return Um inteano que retorna verdadeiro se o usuario foi atualizado com sucesso, e falso se ouve falha no atualizar o arquivo.
 */
ExtPF int AddFoto(Foto_PF *FotoPass);

#endif
